#!/usr/bin/python
# -*- coding: UTF-8 -*-


"""
    请编写一个函数，使其可以删除某个链表中给定的（非末尾）节点。传入函数的唯一参数为 要被删除的节点 。
        现有一个链表 -- head = [4,5,1,9]，它可以表示为:

        4 -> 5 -> 1 ->9

        示例 1：
            输入：head = [4,5,1,9], node = 5
            输出：[4,1,9]
            解释：给定你链表中值为 5 的第二个节点，那么在调用了你的函数之后，该链表应变为 4 -> 1 -> 9.
        示例 2：
            输入：head = [4,5,1,9], node = 1
            输出：[4,5,9]
            解释：给定你链表中值为 1 的第三个节点，那么在调用了你的函数之后，该链表应变为 4 -> 5 -> 9.
    逻辑：
        插入操作处理顺序：中间节点的逻辑，后节点逻辑，前节点逻辑。

        删除操作的处理顺序：前节点逻辑，后节点逻辑，中间节点逻辑：
            如果我们要在链表中删除一个节点，一般的操作是：
                修改要删除节点的上一个节点的指针
                将该指针指向要删除节点的下一个节点
"""

# Definition for singly-linked list.
class ListNode(object):
    def __init__(self, x):
        self.val = x
        self.next = None

class Solution(object):
    def deleteNode(self, node):
        """
        :type node: ListNode
        :rtype: void Do not return anything, modify node in-place instead.
        """
        # 将给定节点下一个节点的数据赋值给需要删除节点的数据
        node.val = node.next.val
        # 上一步操作将需要删除的节点与其下一个节点的值保持一致，二者删除其一即可
        # 因为不知道需要删除节点的上一个节点信息，故可在赋值操作后删除的其下一个节点
        node.next = node.next.next

node = 5
Solution().deleteNode(node)